package ScalaStudy.chapter07

object Test14_HighLevelFunction_Map {

  def main(args: Array[String]): Unit = {


    //////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////  高阶集合函数  //////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////


    val list = List(1,2,3,4,5,6)

    println("============  1、过滤  ============")

    //选取偶数

    val evenList = list.filter((elem:Int) => {elem % 2 == 0})       //传进一个函数，参数是列表中每一个元素，函数体是过滤条件
    val evenList1 = list.filter( _ % 2 == 0)       //简化之后
    println(evenList1)

    //选取奇数

    val evenList2 = list.filter( _ % 2 == 1)       //简化之后
    println(evenList2)

    println("============  2、map操作  ============")

    //把集合中每个元素乘以2

    println(list.map(_ * 2))

    //把集合中每个元素进行平方操作

    println(list.map(x => x * x))

    println("============  3、扁平化  ============")

    val nestedList:List[List[Int]] = List(List(1,2,3),List(4,5),List(6,7,8,9))

    val flatList = nestedList(0) ::: nestedList(1) ::: nestedList(2)             // 符号:::是合并的意思
    println(flatList)

    val flatList2 = nestedList.flatten                                           //扁平化
    println(flatList2)

    println("============  4、扁平映射  ============")
    //将一组字符串进行分词，并保存成单词的列表

    val strings : List[String] = List("hello world", "hello scala", "hello chisel")

    //先得到分词之后的结果
    val splitList: List[Array[String]] = strings.map(strings => strings.split(" "))   //分词

    //扁平化处理
    val flattenList = splitList.flatten
    println(flattenList)

    //扁平映射
    val flatmapList = strings.flatMap(_.split(" "))
    println(flatmapList)

    println("============  5、分组  ============")
    //分成奇偶两组

    val groupMap:Map[Int,List[Int]] = list.groupBy(_%2)
    println(groupMap)

    val groupMap2:Map[String,List[Int]] = list.groupBy(data => {if (data % 2 == 0) "偶数" else "奇数"})
    println(groupMap2)

    //给定一组词汇，安照分词的首字母进行分组

    val wordList = List("china", "america", "alice", "canada", "bob", "japan")

    println(wordList.groupBy(_.charAt(0)))   //charAt(0)为首字母操作


  }
}
